home *** CD-ROM | disk | FTP | other *** search
/ CICA 1995 September (Japanese) / CICA Shareware for Windows CD-ROM (Walnut Creek) (September 1995) (Japanese) (Disc 2).iso / disc2 / nt / ntperf.exe / PERFTOOLS / SRC / PERFMON / FILEOPEN.C_ / FILEOPEN.C
Encoding:
C/C++ Source or Header  |  1993-05-15  |  11.4 KB  |  391 lines

  1. #include "perfmon.h"
  2. #include "cderr.h"
  3.  
  4. #include "alert.h"      // for OpenAlert
  5. #include "fileutil.h"   // for FileOpen, FileRead
  6. #include "grafdata.h"   // for OpenChart
  7. #include "log.h"        // for OpenLog
  8. #include "report.h"     // for OpenReport
  9. #include "utils.h"      // for strempty
  10. #include "perfmops.h"   // for OpenWorkspace
  11. #include "pmhelpid.h"   // Help IDs
  12. #include <dlgs.h>       // for pshHelp
  13.  
  14. #define OptionsOFNStyle \
  15.    (OFN_HIDEREADONLY | OFN_SHOWHELP | OFN_OVERWRITEPROMPT | OFN_ENABLEHOOK)
  16.  
  17. #define ExportOptionsOFNStyle                   \
  18.    (OFN_ENABLETEMPLATE | OFN_HIDEREADONLY |     \
  19.     OFN_SHOWHELP | OFN_ENABLEHOOK | OFN_OVERWRITEPROMPT)
  20.  
  21. extern BOOL APIENTRY ExportOptionsHookProc (HWND hDlg, UINT iMessage, 
  22.                                             WPARAM wParam, LPARAM lParam) ;
  23.  
  24. BOOL APIENTRY FileOpenHookProc (HWND hDlg, 
  25.                                 UINT iMessage, 
  26.                                 WPARAM wParam, 
  27.                                 LPARAM lParam)
  28. {
  29.    BOOL     bHandled = FALSE ;
  30.    
  31.    // only intercept the Help button and bring up our WinHelp data
  32.    if (iMessage == WM_COMMAND && wParam == pshHelp)
  33.       {
  34.       CallWinHelp (dwCurrentDlgID) ;
  35.       bHandled = TRUE ;
  36.       }
  37.    else if (iMessage == WM_INITDIALOG)
  38.       {
  39.       WindowCenter (hDlg) ;
  40.       bHandled = TRUE ;
  41.       }
  42.  
  43.    return (bHandled) ;
  44. }
  45.  
  46.  
  47.  
  48. BOOL FileOpen (HWND hWndParent, int nStringResourceID, LPTSTR lpInputFileName)
  49.    {
  50.    OPENFILENAME   ofn ;
  51.    TCHAR          szFileSpec [256] ;
  52.    TCHAR          szFileTitle [80] ;
  53.    TCHAR          szDialogTitle [80] ;
  54.    HANDLE         hFile ;
  55.    PERFFILEHEADER FileHeader ;
  56.    
  57.    TCHAR          aszOpenFilter[LongTextLen] ;
  58.    int            StringLength ;
  59.    BOOL           retCode ;
  60.    LPTSTR         pFileName = NULL ;
  61.  
  62.    if (strempty(lpInputFileName))
  63.       {
  64.  
  65.       dwCurrentDlgID = HC_PM_idDlgFileOpen ;
  66.  
  67.       // get the file extension strings
  68.       LoadString (hInstance, nStringResourceID, aszOpenFilter,
  69.          sizeof(aszOpenFilter) / sizeof(TCHAR)) ;
  70.       StringLength = lstrlen (aszOpenFilter) + 1 ;
  71.       LoadString (hInstance, nStringResourceID+1,
  72.          &aszOpenFilter[StringLength],
  73.          sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
  74.       StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
  75.  
  76. #ifdef ADVANCED_PERFMON
  77.       // get workspace file extension strings
  78.       LoadString (hInstance, IDS_WORKSPACEFILE, 
  79.          &aszOpenFilter[StringLength],
  80.          sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
  81.       StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
  82.       LoadString (hInstance, IDS_WORKSPACEFILEEXT,
  83.          &aszOpenFilter[StringLength],
  84.          sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
  85.       StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1;
  86. #endif
  87.  
  88.       // get all file extension strings
  89.       LoadString (hInstance, IDS_ALLFILES, 
  90.          &aszOpenFilter[StringLength],
  91.          sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
  92.       StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
  93.       LoadString (hInstance, IDS_ALLFILESEXT,
  94.          &aszOpenFilter[StringLength],
  95.          sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
  96.       StringLength += lstrlen (&aszOpenFilter[StringLength]) ;
  97.  
  98.       // setup the end strings
  99.       aszOpenFilter[StringLength+1] = aszOpenFilter[StringLength+2] = TEXT('\0') ;
  100.  
  101.       strclr (szFileSpec) ;
  102.       strclr (szFileTitle) ;
  103.  
  104.       StringLoad (IDS_FILEOPEN_TITLE, szDialogTitle) ;
  105.       memset (&ofn, 0, sizeof(OPENFILENAME)) ;
  106.       ofn.lStructSize = sizeof(OPENFILENAME) ;
  107.       ofn.hwndOwner = hWndParent ;
  108.       ofn.hInstance = hInstance;
  109.       ofn.lpstrTitle = szDialogTitle ;
  110.       ofn.lpstrFilter = aszOpenFilter ;
  111.       ofn.nFilterIndex = 1L ;
  112.  
  113.       ofn.lpstrFile = szFileSpec;
  114.       ofn.nMaxFile = sizeof(szFileSpec);
  115.       ofn.lpstrFileTitle = szFileTitle;
  116.       ofn.nMaxFileTitle = sizeof(szFileTitle);
  117.       ofn.Flags = OFN_HIDEREADONLY | OFN_SHOWHELP | OFN_FILEMUSTEXIST | OFN_ENABLEHOOK ;
  118.       ofn.lpfnHook = (LPOFNHOOKPROC) FileOpenHookProc ;
  119.  
  120.       if (!GetOpenFileName(&ofn))
  121.          {
  122.          dwCurrentDlgID = 0 ;
  123.          return (FALSE) ;
  124.          }
  125.  
  126.       dwCurrentDlgID = 0 ;
  127.  
  128.       hFile = FileHandleOpen (szFileSpec) ;
  129.       pFileName = szFileSpec ;
  130.  
  131.       }  // NULL lpFileName
  132.  
  133.    else
  134.       {
  135.       // open the input file
  136.       hFile = FileHandleOpen (lpInputFileName) ;
  137.       if (hFile && hFile != INVALID_HANDLE_VALUE &&
  138.           SearchPath (NULL, lpInputFileName, NULL,
  139.             sizeof(szFileSpec)/sizeof(TCHAR) - 1,
  140.             szFileSpec, &pFileName))
  141.          {
  142.          pFileName = szFileSpec ;
  143.          }
  144.       else
  145.          {
  146.          pFileName = NULL ;
  147.          }
  148.       }
  149.  
  150.    if (!hFile || hFile == INVALID_HANDLE_VALUE)
  151.       {
  152.       return (FALSE) ;
  153.       }
  154.  
  155.    if (!FileRead (hFile, &FileHeader, sizeof (FileHeader)))
  156.       {
  157.       CloseHandle (hFile) ;
  158.       if (strempty(lpInputFileName))
  159.          {
  160.          DlgErrorBox (hWndParent, ERR_BAD_SETTING_FILE, pFileName) ;
  161.          }
  162.       return (FALSE) ;
  163.       }
  164.  
  165.  
  166.    //=============================//
  167.    // Chart File?                 //
  168.    //=============================//
  169.  
  170.    if (strsame (FileHeader.szSignature, szPerfChartSignature))
  171.       {
  172.       retCode = OpenChart (hWndGraph,
  173.                            hFile,
  174.                            FileHeader.dwMajorVersion,
  175.                            FileHeader.dwMinorVersion,
  176.                            TRUE) ;
  177.       if (retCode)
  178.          {
  179.          ChangeSaveFileName (pFileName, IDM_VIEWCHART) ;
  180.          }
  181.       else
  182.          {
  183.          goto ErrExit ;
  184.          }
  185.       return (retCode) ;
  186.       }
  187.  
  188. #ifdef ADVANCED_PERFMON
  189.    //=============================//
  190.    // Alert File?                 //
  191.    //=============================//
  192.  
  193.    if (strsame (FileHeader.szSignature, szPerfAlertSignature))
  194.       {
  195.       retCode = OpenAlert (hWndAlert,
  196.                            hFile,
  197.                            FileHeader.dwMajorVersion,
  198.                            FileHeader.dwMinorVersion,
  199.                            TRUE) ;
  200.       if (retCode)
  201.          {
  202.          ChangeSaveFileName (pFileName, IDM_VIEWALERT) ;
  203.          }
  204.       else
  205.          {
  206.          goto ErrExit ;
  207.          }
  208.  
  209.       return (retCode) ;
  210.       }
  211.  
  212.  
  213.    //=============================//
  214.    // Log File?                   //
  215.    //=============================//
  216.  
  217.    if (strsame (FileHeader.szSignature, szPerfLogSignature))
  218.       {
  219.       retCode = OpenLog (hWndLog,
  220.                          hFile,
  221.                          FileHeader.dwMajorVersion,
  222.                          FileHeader.dwMinorVersion,
  223.                          TRUE) ;
  224.       if (retCode)
  225.          {
  226.          ChangeSaveFileName (pFileName, IDM_VIEWLOG) ;
  227.          }
  228.       else
  229.          {
  230.          goto ErrExit ;
  231.          }
  232.  
  233.       return (retCode) ;
  234.       }
  235.  
  236.    //=============================//
  237.    // Report File?                //
  238.    //=============================//
  239.  
  240.    if (strsame (FileHeader.szSignature, szPerfReportSignature))
  241.       {
  242.       retCode = OpenReport (hWndReport,
  243.                             hFile,
  244.                             FileHeader.dwMajorVersion,
  245.                             FileHeader.dwMinorVersion,
  246.                             TRUE) ;
  247.       if (retCode)
  248.          {
  249.          ChangeSaveFileName (pFileName, IDM_VIEWREPORT) ;
  250.          }
  251.       else
  252.          {
  253.          goto ErrExit ;
  254.          }
  255.  
  256.       return (retCode) ;
  257.       }
  258.  
  259.    //=============================//
  260.    // Workspace File?             //
  261.    //=============================//
  262.  
  263.    if (strsame (FileHeader.szSignature, szPerfWorkspaceSignature))
  264.       {
  265.       retCode = OpenWorkspace (hFile,
  266.                                FileHeader.dwMajorVersion,
  267.                                FileHeader.dwMinorVersion) ;
  268.       if (retCode)
  269.          {
  270.          return (TRUE) ;
  271.          }
  272.       else
  273.          {
  274.          goto ErrExit ;
  275.          }
  276.       }
  277. #endif
  278.  
  279.    //=============================//
  280.    // Unknown file type           //
  281.    //=============================//
  282.    CloseHandle (hFile) ;
  283.  
  284. ErrExit:
  285.  
  286.    DlgErrorBox (hWndParent, ERR_BAD_SETTING_FILE, pFileName) ;
  287.    return (FALSE) ;
  288.    }  // FileOpen
  289.  
  290.  
  291. BOOL FileGetName (HWND hWndParent, int nStringResourceID, LPTSTR lpFileName)
  292.    {
  293.    OPENFILENAME   ofn ;
  294.    TCHAR          szFileSpec [256] ;
  295.    TCHAR          szFileTitle [80] ;
  296.    TCHAR          szDialogTitle [80] ;
  297.    TCHAR          aszOpenFilter[LongTextLen] ;
  298.    int            StringLength ;
  299.  
  300.    if (lpFileName)
  301.       {
  302.  
  303.       // get the file extension strings
  304.       LoadString (hInstance, nStringResourceID,
  305.          aszOpenFilter,
  306.          sizeof(aszOpenFilter) / sizeof(TCHAR) ) ;
  307.       StringLength = lstrlen (aszOpenFilter) + 1 ;
  308.       LoadString (hInstance, nStringResourceID+1,
  309.          &aszOpenFilter[StringLength],
  310.          sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
  311.  
  312.       if (nStringResourceID != IDS_EXPORTFILE)
  313.          {
  314.          StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
  315.          // get all file extension strings
  316.          LoadString (hInstance, IDS_ALLFILES, 
  317.             &aszOpenFilter[StringLength],
  318.             sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
  319.          StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
  320.          LoadString (hInstance, IDS_ALLFILESEXT,
  321.             &aszOpenFilter[StringLength],
  322.             sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
  323.          }
  324.  
  325.       // setup the end strings
  326.       StringLength += lstrlen (&aszOpenFilter[StringLength]) ;
  327.       aszOpenFilter[StringLength+1] = aszOpenFilter[StringLength+2] = TEXT('\0') ;
  328.  
  329.       strclr (szFileSpec) ;
  330.       strclr (szFileTitle) ;
  331.  
  332.       if (nStringResourceID == IDS_EXPORTFILE)
  333.          {
  334.          dwCurrentDlgID = HC_PM_idDlgFileExport ;
  335.          StringLoad (IDS_EXPORTAS_TITLE, szDialogTitle) ;
  336.          }
  337.       else if (nStringResourceID == IDS_WORKSPACEFILE)
  338.          {
  339.          dwCurrentDlgID = HC_PM_idDlgFileSaveWorkSpace ;
  340.          StringLoad (IDS_SAVEASW_TITLE, szDialogTitle) ;
  341.          }
  342.       else
  343.          {
  344.          dwCurrentDlgID = HC_PM_idDlgFileSaveAs ;
  345.          StringLoad (IDS_SAVEAS_TITLE, szDialogTitle) ;
  346.          }
  347.  
  348.       memset (&ofn, 0, sizeof(OPENFILENAME)) ;
  349.       ofn.lStructSize = sizeof(OPENFILENAME) ;
  350.       ofn.hwndOwner = hWndParent ;
  351.       ofn.hInstance = hInstance;
  352.       ofn.lpstrTitle = szDialogTitle ;
  353.       ofn.lpstrFilter = aszOpenFilter ;
  354.       ofn.nFilterIndex = 1L ;
  355.  
  356.       ofn.lpstrFile = szFileSpec;
  357.       ofn.nMaxFile = sizeof(szFileSpec);
  358.       ofn.lpstrFileTitle = szFileTitle;
  359.       ofn.nMaxFileTitle = sizeof(szFileTitle);
  360.  
  361.       if (nStringResourceID == IDS_EXPORTFILE)
  362.          {
  363.          ofn.Flags = ExportOptionsOFNStyle ;
  364.          ofn.lpfnHook = (LPOFNHOOKPROC) ExportOptionsHookProc ;
  365.          ofn.lpTemplateName = idDlgExportOptions ;
  366.          }
  367.       else
  368.          {
  369.          ofn.Flags = OptionsOFNStyle ;
  370.          ofn.lpfnHook = (LPOFNHOOKPROC) FileOpenHookProc ;
  371.          }
  372.  
  373.       if (!GetSaveFileName(&ofn))
  374.          {
  375.          dwCurrentDlgID = 0 ;
  376.          return (FALSE) ;
  377.          }
  378.       dwCurrentDlgID = 0 ;
  379.       }
  380.    else
  381.       {
  382.       return (FALSE) ;
  383.       }
  384.  
  385.    lstrcpy (lpFileName, ofn.lpstrFile) ;
  386.  
  387.    return (TRUE) ;
  388.    } // FileGetName
  389.  
  390.  
  391.